#include <iostream>
using namespace std;
#include <pthread.h>
#include <unistd.h>
#include <semaphore.h>

/* 信号量 */
sem_t g_sem;

void printer(const char *str)
{
    /* -1操作 */
    sem_wait(&g_sem);

    while (*str)
    {
        putchar(*str);
        fflush(stdout);
        str++;

        sleep(1);
    }
    /* +1操作 */
    sem_post(&g_sem);

    
}

/* 线程1 */
void *thread_func1(void *arg)
{
    /* 线程分离 */
    pthread_detach(pthread_self());
    const char *str = "hello";

    printer(str);
    pthread_exit(NULL);
}

/* 线程2 */
void *thread_func2(void *arg)
{

    /* 线程分离 */
    pthread_detach(pthread_self());

    const char *str = "world";
    printer(str);

    int count = 10000;
    while (count--)
    {
        cout << "l am thread_func2" << endl;
        sleep(1);
    }
    /* 线程退出 */
    pthread_exit(NULL);
}

int main()
{
    /* 初始化信号量 */
    sem_init(&g_sem,0,1);

    pthread_t tid1;
    pthread_create(&tid1, NULL, thread_func1, NULL);

    pthread_t tid2;
    pthread_create(&tid2, NULL, thread_func2, NULL);

    int cnt = 60;
    while (cnt--)
    {
        sleep(1);
    }
    /* 释放信号量 */
    sem_destroy(&g_sem);

    return 0;
}
